package com.ktgj.flight.service;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import com.ktgj.flight.domain.*;
import com.ktgj.flight.domain.vo.*;
import com.ktgj.flight.vo.FlightOrderInfoVo;
import com.ktgj.pay.api.domain.UnionPayQRCodeResponseApi;

import javax.servlet.http.HttpServletRequest;

/**
 * 机票预订_机票订单基本信息Service接口
 * 
 * @author ruoyi
 * @date 2021-10-26
 */
public interface IFlightOrderInfoService 
{
    /**
     * 查询机票预订_机票订单基本信息
     * 
     * @param orderId 机票预订_机票订单基本信息ID
     * @return 机票预订_机票订单基本信息
     */
    public FlightOrderInfo selectFlightOrderInfoById(Long orderId);

    /**
     * 查询机票预订_机票订单基本信息列表
     * 
     * @param flightOrderInfo 机票预订_机票订单基本信息
     * @return 机票预订_机票订单基本信息集合
     */
    public List<FlightOrderInfo> selectFlightOrderInfoList(FlightOrderInfo flightOrderInfo);

    /**
     * 新增机票预订_机票订单基本信息
     * 
     * @param flightOrderInfo 机票预订_机票订单基本信息
     * @return 结果
     */
    public int insertFlightOrderInfo(FlightOrderInfo flightOrderInfo);

    /**
     * 数据库新增
     * @param flightOrderInfo
     * @return
     */
    public int insertFlightOrderInfoDatabase(FlightOrderInfo flightOrderInfo);

    /**
     * 修改机票预订_机票订单基本信息
     * 
     * @param flightOrderInfo 机票预订_机票订单基本信息
     * @return 结果
     */
    public int updateFlightOrderInfo(FlightOrderInfo flightOrderInfo);

    /**
     * 批量删除机票预订_机票订单基本信息
     * 
     * @param orderIds 需要删除的机票预订_机票订单基本信息ID
     * @return 结果
     */
    public int deleteFlightOrderInfoByIds(Long[] orderIds);

    /**
     * 删除机票预订_机票订单基本信息信息
     * 
     * @param orderId 机票预订_机票订单基本信息ID
     * @return 结果
     */
    public int deleteFlightOrderInfoById(Long orderId);

    /**
     * 我的-订单列表（机票）
     * */
    public List<AirTicketsVo> selectAirTicketsVo(Long customerId);

    /**
     * 我的-订单列表（机票-详细信息）
     * */
    public FlightOrderInfoVo selectFlightOrderInfoByOrderId(Long orderId, Long customerId);

    /**
     * 我的-订单列表（机票-基本信息）删除订单
     * */
    public int updateFlightOrderInfoByOrdernum(Long customerId);

    /**
     * 我的-订单列表（机票-基本信息）取消订单
     * */
    public int updateFlightOrderInfoByOrdernumPnrstatus(FlightOrderInfoVo flightOrderInfoVo);

    /**
     * 我的-订单列表（机票-基本信息）修改订单
     * */
    public int updateFlightOrderInfoByFlightOrderInfoVo(FlightOrderInfoVo flightOrderInfoVo);

    /**
     * 我的-订单列表（机票-基本信息）立即支付（状态修改）
     * */
    public int updateFlightOrderInfoByOrdernumStatus(FlightOrderInfoVo flightOrderInfoVo);

    /**
     * 查询订单列表（机票）
     * */
    public List<TicketOrder> checkTheTicketList(Long customerId, String type);

    /**
     * 根据订单号获取订单信息
     * @param orderId
     * @return
     */
    public FlightOrderInfo selectFlightOrderInfo(String orderId);

    /**
     * 根据pnr获取订单信息
     * @param pnr
     * @return
     */
    FlightOrderInfo queryFlightOrderInfoByPnr(String pnr);

    /**
     * 订单详情
     * @param token
     * @param orderId
     * @return
     */
    public OrderDetails queryFlightOrderInfoByOrderId(String token, Long orderId) throws Exception;

    /**
     * 订单列表
     * @param customerId
     * @param status
     * @return
     */
    public List<FlightOrderList> flightOrderInfoList(Long customerId, String status);

    /**
     * 填写订单
     * @param
     * @param request
     * @return
     */
    FlightFillOrder fillOrder(HttpServletRequest servletRequest, FlightFillOrderEnter request) throws Exception;

    /**
     * 订单收银台
     * @param token
     * @param orderId
     * @param businessType
     * @return
     */
    public FlightOrderCashier selectFlightOrderInfo(String token, Long orderId, String businessType);

    /**
     * 微信小程序支付
     * @param openId
     * @param orderNumber
     * @return
     */
    public Map<String, Object> wechatPay(String openId, String orderNumber, BigDecimal amount, String type, HttpServletRequest request) throws Exception;

    /**
     * 改签微信小程序支付
     * @param openId
     * @param orderNumber
     * @return
     */
    public Map<String, Object> wechatPayChange(String openId, String orderNumber, BigDecimal payAmount, BigDecimal amount, String type, HttpServletRequest request) throws Exception;

    /**
     * 银联二维码支付码获取
     * @param map
     * @return
     */
    public UnionPayQRCodeResponseApi getQRCode(Map<String,String> map, HttpServletRequest request) throws Exception;

    /**
     * 改签订单银联二维码支付码获取
     * @param map
     * @return
     */
    public UnionPayQRCodeResponseApi getQRCodeChange(Map<String,String> map, HttpServletRequest request) throws Exception;

    /**
     * 机票分析（未使用）
     * @param customerId
     * @param startDate
     * @param endDate
     * @return
     */
    public FlightAnalysisDTO flightAnalysis(Long customerId, String startDate, String endDate);

    /**
     * 机票分析
     * @param analysisFlight
     * @return
     */
    public List<AnalysisFlightDTO> analysisFlight(Long customerId, AnalysisFlightVO analysisFlight);

    /**
     * 机票订单详情（CRM）
     * @param orderId
     * @return
     */
    public OrderFlightDetails orderFlightDetails(String orderId);

    /**
     * 机票退票详情（CRM）
     */
    public OrderFlightDetails refundOrderFlight(String orderId) throws Exception;

    /**
     * 改签核对-核对订单信息
     * @param orderId
     * @param ticketNo
     * @return
     */
    public ChangeFlightOrder changeFlightOrder(String orderId, String ticketNo);

    /**
     * 机票订单列表（CRM）
     * @return
     */
    public List<FlightOrderListVO> flightOrderList(FlightOrderDTOCRM order);

    public int queryFlightOrderNumber(Long customerId);

    /**
     * 行程机票订单
     * */
    public JourneyFlightOrderInfoVo journeyFlightOrderInfo(Long orderId);

    /**
     * 机票订单(远成)
     * */
    public List<FlightOrderInfoTickets> selFlightOrderInfoById(Long orderId);

    /**
     * 机票订单(远成)
     * */
    public List<FlightOrderInfoTickets> selFlightOrderInfo(FlightOrderInfoTickets flightOrderInfoTickets);

    /**
     * 获取支付订单列表
     * */
    public List<FlightOrderInfo> payList(String airline, String start, String end);

    /**
     * 回填备注
     * */
    public int backfillRemarks(Long id, String remark);

    /**
     * 订单号获取机票订单信息（远程）
     * */
    public FlightOrderInfo order(Long orderId);

    List<FlightOrderList> orderListThings();
}
